Remote Direct Memory Access (RDMA) is a technique for efficient movement of data over high-speed transports. RDMA enables a computer to directly place information in another computer's memory with minimal demands on memory bus bandwidth and CPU processing overhead, while preserving memory protection semantics. RNIC is an RDMA-enabled NIC (Network Interface Controller). The RNIC may provide support for RDMA over TCP (transport control protocol). RDMA RNIC is also referred to as intelligent RNIC.
In addition to providing RDMA capabilities, the intelligent RNIC is expected to support multiple semantics. For example, it may operate as a regular Ethernet NIC providing a widely-used partial offload of a hardware checksum generation and validation. It may operate as an intelligent NIC providing full TCP termination. It may interface to enable software implementation of socket semantics. It may serve as an iSCSI (Internet Small Computer System Interface) target or initiator adapter, providing partial iSCSI acceleration.
Each one of the semantics capabilities may require a different software environment and different drivers to implement it. The drivers are not necessarily coupled or capable of communicating one with another due to various reasons. For example, the software/drivers may be implemented by different vendors, or the software/drivers may run in a virtualized environment, while others may run on host or embedded CPUs, etc.
An operating system (OS) generally provides services like semaphores, mutexes, spin-locks, etc., for synchronizing different software components. The synchronization schemes may depend on the operating system, and may require different software components to be aware of each other. Alternatively, a single software component may be used that provides such synchronization facilities and exclusive access to the shared hardware.
Such standard synchronization schemes may work well in an application with a single software component, e.g., a standard NIC driver. However, such schemes do not work effectively with multiple software interfaces, such as in intelligent RNIC.